package mmusimulator;

/**
 *
 * @author Michal
 */
public class PC {

    Processor cpu;
    MMU mmu;
    byte[][] ram;
    byte[][] swap;

    public PC() {

        init();

    }

    private void init() {

        cpu = new Processor();
        mmu = new MMU();
        ram = new byte[(int)Simulator.getBitRange(18)][32];
        swap = new byte[(int)Simulator.getBitRange(22)][32];
   
        createMainTable();
        for (int i =0; i < 4820 ;i++){
        long physicalAddress = mmu.getPhysicalAddress(cpu, ram, swap);
        
        System.out.println("INFO: Virtuální adresa na řádku " + i + " má fyzickou adresu " + physicalAddress + " kde je uloženo číslo: " + Simulator.binaryArrayToDec(ram[(int)physicalAddress]));
        System.out.println("--------------------------------------------");
        cpu.lastAdressPosition++;
        }
    }

    /**
     * Vytvoření hlavní tabulky
     */
    private void createMainTable() {

        ram[0] = Simulator.decimalToBinaryArray(1);
        
        for (int i = 1; i <= Simulator.getBitRange(6) + 1; i++) {
            // Naplnění 1 - 65 adresy s odkazama na podtabulky (i * 64 + 1) 
            ram[i] = Simulator.decimalToBinaryArray((i * 64) + 1);
        }
        
        // Nastavení volného rámce, v našem případě 5 * 1024
        ram[4161] = Simulator.decimalToBinaryArray(5 * Simulator.getBitRange(10));
        // Vypnutí SWAPOVÁNÍ
        ram[4162] = Simulator.decimalToBinaryArray(0);
        // Volný rámec na úložišti
        ram[4163] = Simulator.decimalToBinaryArray(0);
        
    }

   
    
    

   
    
}
